GRPC 框架实现微服务
关于RPC
RPC(Remote Procedure Call Protocol)
,是远程过程调用的缩写,通俗的说就是调用远处的一个函数。与之相对应的是本地函数调用,我们先来看一下本地函数调用。当我们写下如下代码的时候:
规则
const result = Add(1,2)
我们知道,我们传入了1,2两个参数,调用了本地代码中的一个Add函数,得到result这个返回值。这时参数,返回值,代码段都在一个进程空间内,这是本地函数调用。
那有没有办法,我们能够调用一个跨进程(所以叫"远程",典型的事例,这个进程部署在另一台服务器上)的函数呢?
这就是RPC主要实现的功能,也是微服务的主要功能。
通俗的讲:微服务的实现就是让我们可以像调用本地函数一样调用远程函数
注意
RPC
并不是一种具体的技术框架,而是一种技术思想。广义上讲,任何通过网络,远程调用另一个进程中的方法的技术,都可以称为 RPC
。
随着时代的发展,越来越多优秀的 RPC
微服务框架进入我们的视野 ,比如谷歌的 GRPC
框架、阿里的dubbo框架
、Facebook
的 Thrift
、
腾讯的Tars
等。下面我们主要给大家讲讲如何使用 Grpc框架
实现 nodejs
微服务。
GRPC介绍
gRPC
是一个高性能、开源和通用的 RPC
框架,面向移动端和 HTTP/2
设计。目前提供 C
、Java
和 Go
语言版本,
分别是:grpc
, grpc-java
, grpc-go.
其中 C
版本支持 C
, C++
, Node.js
, Python
, Ruby
, Objective-C
,
PHP
和 C#
支持。
GRPC
特点:- 提供几乎所有主流语言的实现,打破语言隔阂
- 基于
HTTP/2
标准设计,带来诸如双向流、流控、头部压缩、单TCP
连接上的多复用请求等特
- 基于
- 默认使用
Protocol Buffers
序列化,性能相较于RESTful Json
好很多
- 默认使用
- 工具链成熟,代码生成便捷,开箱即用
- 支持双向流式的请求和响应,对批量处理、低延时场景友好这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
有了
GRPC
, 我们可以一次性的在一个.proto
文件中定义服务,并使用任何支持它的语言去实现客户端 和服务端。GRPC
默认使用protocol buffers
,它是google
开源的一套成熟的结构数据序列化机制(当然 也可以使用其他数据格式如JSON
),可以用proto files
创建gRPC
服务,用protocol buffers
消息类型来 定义方法参数和返回类型。 在GRPC
客户端可以直接调用不同服务器上的远程程序,就想调用本地程序一样,很容易构建分布式应 用和服务。和很多RPC
系统一样,服务负责实现定义好的接口并处理客户端请求,客户端根据接口描述 直接调用需要的服务。客户端和服务器可以分别使用gRP
C支持的不同语言实现。
- 支持双向流式的请求和响应,对批量处理、低延时场景友好这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
有了
参考资料